package com.example.work.utils;

import com.example.work.Excel.AssetReportZhiwang;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.concurrent.atomic.AtomicInteger;

public class AssetIdGenerator {
    // 固定前缀
    private static final String FIXED_PREFIX = "000000CU";
    
    // 全局序列号（所有资产类型和日期共享）
    private static final AtomicInteger GLOBAL_SEQUENCE = new AtomicInteger(10000);
    
    // 输入日期时间格式：2023/10/8 16:29:21
    private static final DateTimeFormatter INPUT_DATE_FORMATTER = 
        DateTimeFormatter.ofPattern("yyyy/M/d H:mm:ss");
    
    // 输出日期格式：yyyyMMdd
    private static final DateTimeFormatter OUTPUT_DATE_FORMATTER = 
        DateTimeFormatter.ofPattern("yyyyMMdd");
    
    /**
     * 生成资产ID
     * @param divReportAssetType 资产类型（4位数字，如"0702"）
     * @param foundTime 发现时间（字符串，格式"yyyy/M/d H:mm:ss"，如"2023/10/8 16:29:21"）
     * @return 生成的资产ID
     */
    public static String generateAssetId(String divReportAssetType, String foundTime) {
        // 验证资产类型是否为4位
        if (divReportAssetType == null || divReportAssetType.length() != 4) {
            throw new IllegalArgumentException("资产类型必须是4位数字");
        }
        
        // 验证日期时间字符串不为空
        if (foundTime == null || foundTime.trim().isEmpty()) {
            foundTime = "2024/8/25 16:29:21";
        }
        
        try {
            // 解析输入日期时间
            LocalDateTime dateTime = LocalDateTime.parse(foundTime, INPUT_DATE_FORMATTER);
            
            // 格式化为yyyyMMdd
            String dateStr = dateTime.format(OUTPUT_DATE_FORMATTER);
            
            // 获取当前全局序列号并递增
            int currentSequence = GLOBAL_SEQUENCE.getAndIncrement();
            
            // 格式化序列号为5位数字（不足5位前面补0）
            String sequenceStr = String.format("%05d", currentSequence);
            
            // 拼接资产ID
            return FIXED_PREFIX + divReportAssetType + dateStr + sequenceStr;
            
        } catch (DateTimeParseException e) {
            throw new IllegalArgumentException("日期时间格式不正确，应为: yyyy/M/d H:mm:ss (如: 2023/10/8 16:29:21)", e);
        }
    }
    
    /**
     * 生成资产ID（使用当前日期时间）
     * @param divReportAssetType 资产类型（4位数字，如"0702"）
     * @return 生成的资产ID
     */
    public static String generateAssetId(String divReportAssetType) {
        // 获取当前日期时间并格式化为输入格式
        String currentDateTime = LocalDateTime.now()
            .format(INPUT_DATE_FORMATTER);
        return generateAssetId(divReportAssetType, currentDateTime);
    }

    public static void main(String[] args) {
        // 示例1：使用指定日期时间
        String assetId1 = AssetIdGenerator.generateAssetId("0702", "2023/10/8 16:29:21");
        System.out.println(assetId1); // 输出: 000000CU07022023100810000

        // 示例2：使用不同日期时间
        String assetId2 = AssetIdGenerator.generateAssetId("0803", "2023/12/25 9:05:30");
        System.out.println(assetId2); // 输出: 000000CU08032023122510001

        // 示例3：使用当前日期时间
        String assetId3 = AssetIdGenerator.generateAssetId("0904");
        System.out.println(assetId3); // 输出类似: 000000CU09042023101310002（日期为当前日期）

        // 示例4：测试边界情况（一位数的月份和日期）
        String assetId4 = AssetIdGenerator.generateAssetId("0102", "2023/1/5 8:00:00");
        System.out.println(assetId4); // 输出: 000000CU01022023010510003
    }

    public static String generateKey(AssetReportZhiwang item) {
        // 处理资产类型
        String assetType = item.getAllReportAssetType() != null && item.getAllReportAssetType().length() >= 4
                ? item.getAllReportAssetType().substring(0, 4)
                : item.getAllReportAssetType();

        // 处理分级对象名称
        String objectName = (item.getGradingObjectName() == null || item.getGradingObjectName().trim().isEmpty())
                ? item.getBusinessSystemName()
                : item.getGradingObjectName();

        return item.getAssetIpInfo() + "_" + objectName + "_" + assetType;
    }

}